package com.hxzy.shop.feign.order;

import com.github.pagehelper.PageInfo;
//import com.hxzy.shop.dto.home.req.RealTimeDataReq;
//import com.hxzy.shop.dto.home.req.VisitTopFiveReq;
//import com.hxzy.shop.dto.home.req.VisitsRep;
//import com.hxzy.shop.dto.home.resp.RealTimeDataResp;
//import com.hxzy.shop.dto.home.resp.VisitTopFiveResp;
//import com.hxzy.shop.dto.home.resp.VisitTopPayResp;
//import com.hxzy.shop.dto.home.resp.VisitsResp;
//import com.hxzy.shop.dto.order.*;
import com.hxzy.shop.dto.order.req.*;
import com.hxzy.shop.dto.order.resp.*;
import com.hxzy.shop.entity.*;
import com.hxzy.shop.fallback.order.OrderFallback;
//import com.hxzy.shop.vo.DrugEpidemicVo;
//import com.hxzy.shop.vo.EpidemicDrugVo;
import com.hxzy.shop.vo.Result;
import feign.Response;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author rlj
 * @Date 2021/8/11 13:35
 * @Version 1.0
 */
@FeignClient(value = "order", fallback = OrderFallback.class, contextId = "HEADQUARTERS")
public interface OrderFeign {


    /**
     * 订单列表
     *
     * @param orderManageReq 订单请求体
     * @return 订单分页
     */
    @PostMapping("/order/getOrderManageList")
    Result<PageInfo<OrderManageListResp>> getOrderManageList(@RequestBody @Validated OrderManageReq orderManageReq);


    /**
     * 订单详细
     *
     * @param orderDetailReq 订单详情请求体
     * @return 订单详情
     */
    @PostMapping("/order/getOrderDetail")
    Result<OrderDetailResp> getOrderDetail(@RequestBody @Validated OrderDetailReq orderDetailReq);

    /**
     * 获得订单列表总数
     *
     * @param orderCountsReq 请求体
     * @return 总数
     */
    @PostMapping("/order/orderCountS")
    Result<OrderCountsResp> orderCountS(@RequestBody OrderCountsReq orderCountsReq);

    /**
     * 获得所有门店
     *
     * @return 门店集合
     */
    @PostMapping("/order/getStoreList")
    Result<List<StoreResp>> getStoreList();

    /**
     * 修改用户的发货地址
     *
     * @param updateUserDetailReq 请求体
     * @return 是否成功
     */
    //@PostMapping("/order/updateUserDetail")
    //Result<Boolean> updateUserDetail(@RequestBody @Validated UpdateUserDetailReq updateUserDetailReq);


    /**
     * 处方信息
     *
     * @param orderIdReq 请求体
     * @return 处方信息
     */
    //@PostMapping("/order/getPrescription")
    //Result<Prescription> getPrescription(@RequestBody @Validated OrderIdReq orderIdReq);

    /**
     * 处方信息
     *
     * @param orderIdReq 请求体
     * @return 莲藕处方信息
     */
    //@ApiOperation("莲藕处方信息")
    //@PostMapping("/order/getLianouRx")
    //public Result<LianouRx> getLianouRx(@RequestBody @Validated OrderIdReq orderIdReq);
    /**
     * 订单发货备货
     *
     * @param orderSendPackageReq 请求体
     * @return 是否成功
     */
    //@PostMapping("/order/orderSendPackage")
    //Result<Boolean> orderSendPackage(@RequestBody @Validated OrderSendPackageReq orderSendPackageReq);

    /**
     * 订单关闭
     *
     * @param orderIdReq 请求体
     * @return 是否成
     */
//    @PostMapping("/order/shutOrder")
//    Result<Boolean> shutOrder(@RequestBody @Validated OrderIdReq orderIdReq);


    /**
     * 核销
     *
     * @param orderIdReq 请求体
     * @return 是否成功
     */
//    @PostMapping("/order/confirmReceipt")
//    Result<Boolean> confirmReceipt(@RequestBody @Validated OrderIdReq orderIdReq);

    /**
     * 导出订单
     *
     * @param orderExportReq 请求体
     * @return 订单
     */
//    @PostMapping(value = "/order/orderExport")
//    Response orderExport(@RequestBody OrderExportReq orderExportReq);

    /**************售后**************

     /**
     * 售后订单服务列表
     *
     * @param afterSaleRep 请求体
     * @return 服务列表
     */
//    @PostMapping("/order/getAfterSaleList")
//    Result<PageInfo<AfterSaleResp>> getAfterSaleList(@RequestBody @Validated AfterSaleRep afterSaleRep);

    /**
     * 获得退款的总数
     *
     * @param orderCountsReq 请求体
     * @return 总数
     */
//    @PostMapping("/order/getAfterSaleCount")
//    Result<AfterSaleCountResp> getAfterSaleCount(@RequestBody OrderCountsReq orderCountsReq);


    /**
     * 退款详细
     *
     * @param refundOrderDetailReq 请求体
     * @return 退款信息
     */
//    @PostMapping("/order/getRefundOrderDetail")
//    Result<RefundOrderDetailResp> getRefundOrderDetail(@RequestBody @Validated RefundOrderDetailReq refundOrderDetailReq);

    /**
     * 处理售后订单
     *
     * @param processingApplicationsReq 请求体
     * @return 是否成功
     */
//    @PostMapping("/order/processingApplications")
//    Result<Boolean> processingApplications(@RequestBody ProcessingApplicationsReq processingApplicationsReq);


    /**
     * 售后订单确认退款
     *
     * @param confirmRefundReq 请求体
     * @return 退款
     */
//    @PostMapping("/order/confirmRefund")
//    void confirmRefund(@RequestBody ConfirmRefundReq confirmRefundReq);

    /**
     * 售后导出
     *
     * @param orderExportReq 请求体
     */
//    @PostMapping(value = "/order/salesOrderExport")
//    Response salesOrderExport(OrderExportReq orderExportReq);

    /**
     * 申请退款
     *
     * @param refundReq 请求体
     * @return 是否成功
     */
//    @ApiOperation(value = "申请退款")
//    @PostMapping("/order/refund")
//    Result<Object> refund(@RequestBody @Validated RefundReq refundReq);


    /*********** 首页************

     /**
     * 首页实时数据
     *
     * @param realTimeDataReq 请求体
     * @return 数据
     */
//    @PostMapping("/order/getRealTimeData")
//    Result<RealTimeDataResp> getRealTimeData(@RequestBody @Validated RealTimeDataReq realTimeDataReq);

    /**
     * 流量趋势-浏览量
     *
     * @param visitsRep 请求体
     * @return 浏览量
     */
//    @PostMapping("/order/visits")
//    Result<List<VisitsResp>> visits(@RequestBody @Validated VisitsRep visitsRep);

    /**
     * 热门商品
     *
     * @param visitTopFiveReq 请求体
     * @return 热门的商品
     */
//    @PostMapping("/order/VisitTopFive")
//    Result<List<VisitTopFiveResp>> visitTopFive(@RequestBody @Validated VisitTopFiveReq visitTopFiveReq);

    /**
     * 热门商品支付
     *
     * @param visitTopFiveReq 请求体
     * @return 热门支付商品
     */
//    @PostMapping("/order/visitTopPay")
//    Result<List<VisitTopPayResp>> visitTopPay(@RequestBody @Validated VisitTopFiveReq visitTopFiveReq);

    /**
     * 新仿客流量趋势
     *
     * @param visitsRep 请求体
     * @return 流量趋势
     */
//    @PostMapping("/order/newVisits")
//    Result<List<VisitsResp>> newVisits(@RequestBody @Validated VisitsRep visitsRep);

    /**
     * 对账管理
     *
     * @param reconciliationAdminReq 请求体
     * @return 对账管理
     */
//    @PostMapping("/order/getReconciliationAdmin")
//    Result<PageInfo<ReconciliationAdminResp>> getReconciliationAdmin(@RequestBody @Validated ReconciliationAdminReq reconciliationAdminReq);

    /**
     * 导出对账管理
     *
     * @param reconciliationAdminReq 请求体
     */
//    @PostMapping("/order/exportFile")
//    Response exportFile(ReconciliationAdminReq reconciliationAdminReq);


    /**
     * 分销-订单管理
     *
     * @param req
     * @return
     */
//    @PostMapping("/distributorOrder/getDistributorOrderList")
//    @ApiOperation("订单管理分页")
//    public Result<PageInfo<DistributouOrderListResp>> getDistributorOrderList(@RequestBody DistributouOrderListReq req);



    /**
     * 导出分销订单
     *
     * @param req
     * @return
     */
//    @PostMapping("/distributorOrder/getOrderList")
//    public Result<List<NewDistributouOrderListResp>> getOrderList(@RequestBody DistributouOrderListReq req);


    /**
     * 分页分销订单查询
     * @param req
     * @return
     */
//    @PostMapping("/distributorOrder/newGetDistributorOrderList")
//    public Result<PageInfo<DistributouOrderListResp>> newGetDistributorOrderList(@RequestBody DistributouOrderListReq req);
//




    /**
     * 系统给用户加减积分
     */
//    @ApiOperation(value = "系统给用户加减积分", notes = "系统给用户加减积分")
//    @PostMapping(value = "/pointOrder/addPoint")
//    public Result<Object> addPoint( @RequestBody PointChangeDto dto);
//    @ApiOperation("用户自己上传的处方单信息")
//    @PostMapping("/order/getUserSelfePrescription")
//    Result<OrderInnerUserselfPrescription> getUserSelfe(OrderIdReq orderIdReq);
//    @ApiOperation(value = "订单数量统计")
//    @PostMapping("/order/editUserSelfPrescriptionUrl")
//    Result<Boolean> editUserSelfPrescriptionUrl(EditUserSelfPrescriptionUrlReq req);
    /**********后台审核处方*************/
//    @ApiOperation(value = "后台审核处方", notes = "后台审核处方")
//    @PostMapping(value = "/order/reviewPrescriptions")
//    Result<Boolean> reviewPrescriptions(ReviewPrescriptionsReq req);




//    @ApiOperation(value = "查询疫情管理")
//    @PostMapping("/epidemic/getByEpidemicControl")
//    public Result<EpidemicControl> getByEpidemicControl();

//    @ApiOperation(value = "保存疫情管理")
//    @PostMapping("/epidemic/saveEpidemicControl")
//    public Result<Object> saveEpidemicControl(@RequestBody EpidemicControl dto);

//    @ApiOperation(value = "查询疫情药品")
//    @PostMapping("/epidemic/getByEpidemicDrugList")
//    public Result<PageInfo<EpidemicDrugVo>> getByEpidemicDrugList(@RequestBody EpidemicDrugDto dto);

//    @ApiOperation(value = "保存疫情管药品")
//    @PostMapping("/epidemic/saveEpidemicDrug")
//    public Result<Object> saveEpidemicDrug(@RequestBody AddEpidemicDrugDto dto);

//    @ApiOperation(value = "查询药品（过滤已添加疫情药）")
//    @PostMapping("/epidemic/getByDrugEpidemic")
//    public Result<PageInfo<DrugEpidemicVo>> getByDrugEpidemic(@RequestBody EpidemicDrugDto dto);

//    @ApiOperation(value = "删除疫情药品")
//    @DeleteMapping("/epidemic/{ids}")
//    public Result<Object> batchRemove(@PathVariable("ids") List<Long> ids);



//    @ApiOperation("查询代客下单订单列表")
//    @PostMapping("/employee/getByCustomersOrderList")
//    public Result<PageInfo<CustomersOrder>> getByCustomersOrderList(@RequestBody CustomersOrderDto dto);

//    @ApiOperation("导出代客下单")
//    @PostMapping("/employee/exportCustomersOrder")
//    public Result<List<CustomersOrder>> exportCustomersOrder(@RequestBody ExportCustomersOrderDto dto);
}
